package com.dingwen.treasure.kettle.base.convert.model;

import com.dingwen.treasure.kettle.constant.SuppressWarningConstant;

/**
 * 　BeanConvert: Bean 转换接口 </br>
 * <p>类型：</p>
 * <ul>
 *     <li>P: PO,数据库实体对象（持久化对象）</li>
 *     <li>D: DTO,数据传输对象</li>
 *     <li>V: VO，视图对象</li>
 * </ul>
 * 　@author dingwen
 * 　@date 2022/5/17
 */
@SuppressWarnings(SuppressWarningConstant.ALL)
public interface BeanConvert<P, D, V> {

    /**
     * PO ---> DTO
     * 持久化对象 ---> 数据传输对象
     * @param p P
     * @return {@link D}
     */
    D poToDTO(P p);

    /**
     * PO ---> VO
     * 持久化对象 ---> 视图对象
     * @param p P
     * @return {@link V}
     */
    V poToVO(P p);


    /**
     * DTO ---> PO
     * 数据传输对象 ---> 持久化对象
     * @param d D
     * @return {@link P}
     */
    P dtoToPO(D d);

    /**
     * DTO ---> VO
     * 数据传输对象 ---> 视图对象
     * @param d D
     * @return {@link P}
     */
    V dtoToVO(D d);


    /**
     * VO ---> PO
     * 视图对象 ---> 持久化对象
     * @param v
     * @return {@link P}
     */
    P voToPO(V v);

    /**
     * VO ---> DTO
     * 视图对象 ---> 数据传输对象
     * @param v
     * @return {@link P}
     */
    D voToDTO(V v);

}


